package com.ztgf.order.models.service.pay;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.ztgf.order.models.bo.pay.PayOrderLogBO;
import com.ztgf.order.models.bo.pay.PayOrderSaveBO;
import com.ztgf.order.models.dto.pay.PayOrderLogDTO;
import com.ztgf.order.models.vo.pay.*;
import com.ztgf.pay.models.bo.PayOrderMotherSaveBO;
import com.ztgf.pay.models.dto.PayOrderDTO;
import com.ztgf.pay.models.dto.PayUserRechargeDTO;

import java.math.BigDecimal;
import java.util.List;

/**
 * 支付日志表服务
 *
 * @author mxli
 * @Date 2021-06-03 16:12:28
 */
public interface IPayOrderLogService extends IService<PayOrderLogDTO> {

    void savePayParams(List<PayOrderLogDTO> logDTOList, List<PayOrderDTO> orderDTOList
            , Long orderId, Long orderPeriodsId, Integer periods, Long recvShopId, Long commodityBargainId, Long oldPayOrderLogId
            , Long userId, String userName, Long payShopId, Integer payType, Integer moneyStatus, Integer businessType
            , Integer orderType, String bankId, String bankName, BigDecimal money, String moneyUsage, String commodityMsg
            , String trsFlag);

    void savePayParams(List<PayOrderLogDTO> logDTOList, List<PayOrderDTO> orderDTOList
            , Long orderId, Long orderPeriodsId, Integer periods, Long recvShopId,Long commodityBargainId, Long oldPayOrderLogId
            ,Long userId, String userName, Long payShopId, Integer payType, Integer moneyStatus, Integer businessType
            ,Integer orderType, String bankId, String bankName, BigDecimal money, String moneyUsage, String commodityMsg
            ,String trsFlag,String notes);

    /**
     * 添加日志
     * @param orderId 订单id
     * @param orderPeriodsId 订单分期支付id
     * @param periods 期数
     * @param recvShopId 卖家id
     * @param commodityBargainId  店铺报价表id
     * @param oldPayOrderLogId  重复支付原支付订单流水号
     * @param userId 用户id
     * @param userName 用户名称
     * @param payShopId 买家id
     * @param payType  支付类型：0余额，1网银，2票据
     * @param moneyStatus 金额状态：0未冻结，1冻结
     * @param businessType //金额类型：0订单金额，1佣金、2缴纳保证金、3年费、4采购申请平台砍价、5砍价手续费、6重复支付，7售后退款、8解冻保证金、9扣除保证金、10取消订单退款、11取消砍价服务费退款、12售后服务费退款、13签收解冻金额、14解冻砍价手续费、15缴纳物流保证金，16解冻物流保证金、17扣除物流保证金、18支付物流账单
     * @param orderType //支付类型：0支付，1退款、2冻结、3解冻
     * @param bankId 银行id
     * @param bankName 银行名称
     * @param money 金额
     * @param notes  备注
     * @param billName 票据支付名称
     * @param billUrl 票据支付图片
     * @return
     */
    PayOrderLogDTO newLogDTO(Long orderId, Long orderPeriodsId, Integer periods, Long recvShopId,Long commodityBargainId, Long oldPayOrderLogId
            ,Long userId, String userName, Long payShopId, Integer payType, Integer moneyStatus, Integer businessType
            ,Integer orderType, String bankId, String bankName, BigDecimal money, String notes, String billName, String billUrl);

    /**
     * 添加日志
     * @param orderId 订单id
     * @param orderPeriodsId 订单分期支付id
     * @param periods 期数
     * @param recvShopId 卖家id
     * @param commodityBargainId  店铺报价表id
     * @param oldPayOrderLogId  重复支付原支付订单流水号
     * @param userId 用户id
     * @param userName 用户名称
     * @param payShopId 买家id
     * @param payType  支付类型：0余额，1网银，2票据
     * @param moneyStatus 金额状态：0未冻结，1冻结
     * @param businessType //金额类型：0订单金额，1佣金、2缴纳保证金、3年费、4采购申请平台砍价、5砍价手续费、6重复支付，7售后退款、8解冻保证金、9扣除保证金、10取消订单退款、11取消砍价服务费退款、12售后服务费退款、13签收解冻金额、14解冻砍价手续费、15缴纳物流保证金，16解冻物流保证金、17扣除物流保证金、18支付物流账单
     * @param orderType //支付类型：0支付，1退款、2冻结、3解冻
     * @param bankId 银行id
     * @param bankName 银行名称
     * @param money 金额
     * @return
     */
    PayOrderLogDTO newLogDTO(Long orderId, Long orderPeriodsId, Integer periods, Long recvShopId,Long commodityBargainId, Long oldPayOrderLogId
            ,Long userId, String userName, Long payShopId, Integer payType, Integer moneyStatus, Integer businessType
            ,Integer orderType, String bankId, String bankName, BigDecimal money);

    void saveHttpPay(PayOrderMotherSaveBO saveBO, PayOrderSaveBO bo, PayOrderVO payOrderVO);

    void saveHttpPay(PayOrderMotherSaveBO saveBO, PayOrderSaveBO bo, PayOrderVO payOrderVO, Integer orderType);

    /**
     * 余额支付
     * @param saveBO
     */
    void saveHttpPayBalance(PayOrderMotherSaveBO saveBO);

    /**
     * 获取订单支付金额 - 前端需要
     * @param ids
     * @param moneyVO
     * @param shopId
     */
    void getOrderInfo(String ids, PayOrderMoneyVO moneyVO, Long shopId);

    /**
     * 获取订单支付金额
     * @param ids
     * @param shopId
     * @return
     */
    List<PayOrderInfoVO> queryOrderCommodity(String ids, Long shopId);

    /**
     * 获取申请平台砍价服务费 - 前端需要
     * @param ids
     * @param moneyVO
     * @param shopId
     */
    void getPurchaseBargain(String ids, PayOrderMoneyVO moneyVO, Long shopId);

    /**
     * 获取申请砍价服务费
     * @param ids
     * @param shopId
     * @return
     */
    List<PayPurchaseOrderVO> queryPurchaseBargain(String ids, Long shopId);

    /**
     * 获取佣金待支付金额
     * @param ids
     * @param moneyVO
     * @param shopId
     */
    void getCommissionMoney(String ids, PayOrderMoneyVO moneyVO, Long shopId);

    /**
     * 获取待支付佣金
     * @param ids
     * @param shopId
     * @return
     */
    List<PayOrderInfoVO> queryCommissionMoney(String ids, Long shopId);// 获取佣金

    /**
     * 获取待缴砍价手续费金额
     * @param ids
     * @param moneyVO
     * @param shopId
     */
    void getPurchaseFeeMoneyScalePrice(String ids, PayOrderMoneyVO moneyVO, Long shopId);

    /**
     * 获取砍价成功后手续费
     * @param ids
     * @param shopId
     * @return
     */
    List<PayOrderInfoVO> queryPurchaseFeeMoneyScalePrice(String ids, Long shopId);

    /**
     * 获取待缴年费金额
     * @param ids
     * @param moneyVO
     */
    void getAnnualFee(String ids, PayOrderMoneyVO moneyVO);

    /**
     * 获取待缴年费金额
     * @param ids
     * @return
     */
    List<PayShopVO> queryAnnualFee(String ids);

    /**
     * 获取待缴保证金额
     * @param ids
     * @param moneyVO
     */
    void getMargin(String ids, PayOrderMoneyVO moneyVO);

    /**
     * 获取保证金
     * @param ids
     * @return
     */
    List<PayShopVO> queryMargin(String ids);//获取保证金

    /**
     * 查询扣除保证金总和
     * @param shopId
     * @param type
     * @return
     */
    BigDecimal querySumDeductMarginMoney(Long shopId, int type);

    /**
     * 分页查询日志记录
     * @param bo
     * @return
     */
    Page<PayOrderLogVO> queryPagePayOrderLog(PayOrderLogBO bo);

    /**
     * 获取物流待缴保证金额
     * @param shopId
     * @param moneyVO
     */
    void getLogisticsMargin(Long shopId, PayOrderMoneyVO moneyVO);

    /**
     * 获取物流待缴保证金
     * @param shopId
     * @return
     */
    List<PayShopVO> queryLogisticsMargin(Long shopId);//获取保证金

    /**
     * 获取物流待缴保证金额
     * @param ids
     * @param moneyVO
     */
    void getLogisticsBill(String ids, Long shopId, PayOrderMoneyVO moneyVO);

    /**
     * 获取物流待缴保证金
     * @param ids
     * @return
     */
    List<PayShopVO> queryLogisticsBill(String ids, Long shopId);//获取保证金



    /**
     * 修改日志状态
     * @param id
     * @param payOrderId
     * @param status
     * @param moneyStatus
     */
    void savePayOrderLogDTOStatus(Long id, Long payOrderId, int status, Integer moneyStatus);

    /**
     * 网银充值
     * @param payOrderVO
     * @param shopId
     * @param money
     * @param bankId
     * @param businessId
     * @param usage
     * @param pageNotificationUrl
     */
    void saveRechargeByOnlineBank(PayOrderVO payOrderVO, Long shopId, BigDecimal money, String bankId, Long businessId, String usage, String pageNotificationUrl);

    /**
     * 解冻金额
     * @param shopId
     * @param money
     * @param usage
     */
    void saveUnfreezeMoney(Long shopId, Long businessId, BigDecimal money, String usage);

    /**
     * 支付成功回调
     * @param orderDTO
     */
    void savePaySuccessNotify(PayOrderDTO orderDTO);

    /**
     * 充值成功回调
     * @param rechargeDTO
     */
    void saveRechargeSuccessNotify(PayUserRechargeDTO rechargeDTO);
}
